 import router from './router'
import store from './store'
 // 进程动画插件
import NProgress from 'nprogress'
// 进程动画样式
import 'nprogress/nprogress.css' 
// get 获取token
import { getToken } from '@/utils/auth' 
// 获取标题名字
// import getPageTitle from '@/utils/get-page-title'
// 获取根路径，就是/admin
import { roterPre } from '@/settings'
// 引入表单编辑对话框
import { getInfo } from '@/api/user'
// 进程动画程序
NProgress.configure({ showSpinner: false }) 
// 定义了一个字符串，登录页面的路径
const whiteList = [`${roterPre}/login`] // no redirect whitelist
// 路由导航守卫
router.beforeEach(async(to, from, next) => {
  // 进程动画开启
  NProgress.start()

  // 设置标题
  // document.title = getPageTitle(to.meta.title)

  // 判断用户是否已经登录
  const hasToken = getToken()
  // 如果用户已经登录，有token的时候
  if (hasToken) {
    // 如果要去登录页面
    if (to.path === `${roterPre}/login`) {
      // 则重定向到主页
      next({ path: '/' })
      // 进程动画结束
      NProgress.done()
    } 
    // 如果不是去登录页面
    else {
      // await store.dispatch('user/getMenus')
      // from 代表从那个路径跳转而来
      // 从‘/’或‘登录’界面跳转过来的话
      if(from.fullPath === '/' && from.path !==`${roterPre}/login`){
        // 获取角色信息
        getInfo().then(res => {
          // 成功则通行
          next()
          // 进程动画结束
          NProgress.done()
        }).catch(res => {
          // 失败也通行
          next()
          // 进程动画结束
          NProgress.done()
        })
      }
      // 从其他页面跳转过来的话
      else{
        // 直接通行
        next()
        // 进程动画结束
        NProgress.done()
      }
    }
  } 
  // 如果用户没有登录，没有token的情况
  else {
    // whiteList：母集
    // to.path：子集
    // indexOf：不存在就等于-1，存在就等于索引
    // 如果去的路径是登录页面
    if (whiteList.indexOf(to.path) !== -1) {
      // 通行
      next()
    } 
    // 去的路径不是登录页的话
    else {
      // 其他没有访问权限的页面会被重定向到登录页面
      // 触发vuex的移除token的方法
      await store.dispatch('user/resetToken')
      // 跳转到登录页
      next(`${roterPre}/login`)
      // next(`${roterPre}/login?redirect=${to.path}`)
      // 进程动画结束
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  // 进程动画结束
  NProgress.done()
})
